package pre.service;

import java.util.ArrayList;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import pre.dao.boardDAO;
import pre.vo.boardVO;
import pre.vo.pageVO;
import pre.vo.pagingBoardVO;

/**
 * service 클래스
 * @author hyem55
 *
 */
@Service("boardService")
public class boardService {
	//의존성 주입
	@Resource(name="boardDAO")
	private boardDAO dao;
	
	/*
	 * 페이지 처리된 게시판 전체 목록을 조회(설명 + 실습)
	 * @param : int page
	 * @return pagingBoard
	 * 1. int형 변수 total을 선언하고 boardDAO의 게시글 전체 개수를 얻는 메소드(getTotalCountOfBoard())를 사용하여 DB에 저장된 총 게시글의 갯수를 저장 
	 */
	public pagingBoardVO selectBoardListByPage(int page){
		ArrayList<boardVO> list = dao.selectBoardListByPage(page);
		int total = dao.getTotalCountOfBoard();//1.
		pageVO paging = new pageVO(total, page);
		pagingBoardVO pagingBoard = new pagingBoardVO(list, paging);
		return pagingBoard;
	}
	
	/*
	 * 글쓰기 등록(저장)(실습)
	 * @param : boardVO board(입력받은 게시물의 정보)
	 * 1. DB에 입력할 게시물의 번호값(boardDAO의 게시물의 번호를 얻는 메소드(getBoardNum())를 이용하여 구한 다음 인덱스 값)을 boardVO객체에 저장
	 * 2. boardDAO의 게시물 등록(저장)하는 메소드(insertBoard(boardVO형))를 선언
	 */
	public void insertBoard(boardVO board){
		board.setNum(dao.getBoardNum());//1.
		dao.insertBoard(board);//2.
	}
	
	//글삭제
	public void deleteBoardByNum(int boardNum){
		dao.deleteBoard(boardNum);
	}
	/*
	 * 글 검색 (실습)
	 * @param : int page, String regName
	 * @return pagingBoard
	 * 1. ArrayList<boardVO>객체형 변수 list에 boardDAO의 글쓴이로 게시글을 검색하는 메소드(searchBoardListByRegName(int형, String형))의 리턴 값을 저장
	 * 2. int형 변수 total에 list의 총 개수를 저장(List객체의 크기 구하는 함수 -> size())
	 * 3. pageVO객체형 변수 paging에 pageVO(글의 총 갯수, 현재페이지)를 생성
	 * 4. pagingBoardVO객체형 변수 pagingBoard에 pagingBoardVO(검색된 게시글 목록, 페이지관련객체)를 생성
	 * 5. 컨트롤러에 전달할 검색된 게시물 목록을 리턴
	 */
	public pagingBoardVO searchBoardListByRegName(int page, String regName){
		ArrayList<boardVO> list = dao.searchBoardListByRegName(page, regName);//1.
		int total = list.size();//2.
		pageVO paging = new pageVO(total, page);//3.
		pagingBoardVO pagingBoard = new pagingBoardVO(list, paging);//4.
		return pagingBoard;//5.
	}
	///검색조건 : 제목(미완성)
	public pagingBoardVO searchBoardListBySubject(int page, String subject){
		ArrayList<boardVO> list = dao.searchBoardListByRegName(page, subject);
		int total = list.size();
		pageVO paging = new pageVO(total, page);
		pagingBoardVO pagingBoard = new pagingBoardVO(list, paging);
		return pagingBoard;
	}
	
	//글조회 : 해당 num에 대하여 게시글 상세조회
	public boardVO selectBoardView(int boardNum){
		boardVO board = dao.selectBoardByNum(boardNum);
		return board;
	}
	
	//글수정 : 글 내용 갱신 호출 후 리턴
	public boardVO updateBoardView(boardVO board){
		return dao.updateBoard(board);
	}
	
}
